<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

<script>
  // 强制类型转换

  // 1. 其他数据类型转换成数值类型

  // 1.1 Number()
  // console.log(Number(10)); // 10
  // console.log(Number("10")); // 10
  // console.log(Number("abc")); // NaN
  // console.log(Number("3.1415926")); // 3.1415926
  // console.log(Number("3.1415926abcd")); // NaN
  // console.log(Number(true)); // 1
  // console.log(Number(false)); // 0
  // console.log(Number(undefined)); // NaN
  // console.log(Number(null)); // 0
  // Number方法的作用和前面加一个+是完全一样的

  // 1.2 parseInt()
  // 转换规则:
  // 不管你要转换的是什么数据, 都一位一位的看待
  // 如果第一位就不能转换成合法数字, 那么直接给出 NaN, 停止转换
  // 如果第一位可以, 那么继续转换第二位
  // 以此类推, 直到遇到不能转换的为止
  // console.log(parseInt(10)); // 10
  // console.log(parseInt("10")); // 10
  // console.log(parseInt("abc")); // NaN
  // console.log(parseInt("123px")); // 123   
  // console.log(parseInt("123abc456")); // 123
  // console.log(parseInt(3.1415926)); // 3   取一个小数的整数部分

  // 1.3 parseFloat()
  // 转换规则:
  // 和 parseInt 一模一样
  // 唯一的区别就是认识一位小数点
  // console.log(parseFloat(10));
  // console.log(parseFloat("10"));
  // console.log(parseFloat(10.23));
  // console.log(parseFloat("20px"));
  // console.log(parseFloat("20.33px"));   在dom操作的时候，获取不带单位的数据
  // console.log(parseFloat("20.33.44.55"));
  // console.log(parseFloat(3.1415926));
  // console.log(parseFloat("abc"));







  // 2. 其他数据类型转换成字符串类型
  // 2.1 toString()
  // var a = "hello";
  // console.log(a.toString()); // "hello"
  // var b = 10;
  // console.log(b.toString()); // "10"
  // var c = 10.123;
  // console.log(c.toString()); // "10.123"
  // var d = undefined;
  // console.log(d.toString()); // 报错
  // var e = null;
  // console.log(e.toString()); // 报错
  // var f = true;
  // console.log(f.toString()); // "true"

  // undefined和null是不能使用toString方法
  // 一个值是不能直接调用toString方法，必须先要用一个变量存起来才能使用



  // 2.2 String()
  // var a = "hello";
  // console.log(String(a)); // "hello"
  // var b = 10;
  // console.log(String(b)); // "10"
  // var c = 10.123;
  // console.log(String(c)); // "10.123"
  // var d = undefined;
  // console.log(String(d)); // "undefined"
  // var e = null;
  // console.log(String(e)); // "null"
  // var f = true;
  // console.log(String(f)); // "true"
  // 所有数据都能转换


  // 2.3 使用加号做隐式转换
  // 加号的任意一边，如果出现了字符串，那么就变成了字符串拼接
  // 当变成字符串拼接的时候，会自动将加号两边的内容转成字符串
  // console.log("张三说" + "123");
  // console.log("张三说" + 123);
  // console.log("张三说" + true);

  // var a = true;
  // console.log(a + "");
  // 所以一个变量加上一个空字符串，就相当于String()方法







  // 3. 其他数据类型转换成布尔类型
  // Boolean
  // 对于数字来说，转成布尔值，非0即真
  // 对于字符串来说，转成布尔值，非空即真
  // 对于null和undefined来说，转成布尔值，都是false
  // 在 js 中，只有 ''、0、null、undefined、NaN，这些是 false

  // console.log(Boolean(10)); 
  // console.log(Boolean(-10)); 
  // console.log(Boolean(0)); 
  // console.log(Boolean(0.3)); 
  // console.log(Boolean("hello")); 
  // console.log(Boolean("false")); 
  // console.log(Boolean("")); 
  // console.log(Boolean(" ")); 
  // console.log(Boolean(true)); 
  // console.log(Boolean(false)); 
  // console.log(Boolean(null)); 
  // console.log(Boolean(undefined)); 
  // console.log(Boolean(NaN)); 

  // console.log(!!10);
  // 也可以使用两个！，将变量转成布尔值




</script>